위성Tracefield · 02

격자로 나눠서 AI 분석해보자

작성자 : Heehyeon Yoo|2026-05-29
# Tracefield# 지역변화관측# OpenAI# Sentinel-2# DevLog

GitHub: Tracefield

왜 AI를 붙였나

AI 프로젝트를 하다 보면 자꾸 온갖 데에 AI를 얹어 보고 싶어진다.

전후 장면을 겹쳐 보는 데까지는 만들었는데 달라진 부분을 사람이 직접 해석하려면 번거롭다. 선택한 영역의 지리 데이터를 자동으로 끌어오고 AI가 한번에 정리해 주면 어떨까 싶었다. 위성 한 장을 통째로 LLM한테 넘기면 좀 막막하니까 영역을 격자로 쪼개는 쪽으로 갔다.

격자 나누기

선택 영역을 기본 32×32 격자로 나눈다. 셀마다 NDWI(물과 습지)랑 NDVI(식생) 지표를 before/after 양쪽에서 계산해서 차이를 변화 점수로 만든다. 구름이 낀 셀은 SCL(장면 분류) 밴드로 마스킹해서 신뢰도를 따로 매긴다.

COG를 읽는 건 Rasterio 라이브러리가 한다. 셀 하나에 12픽셀씩 샘플링하니까 내부적으로는 384×384 그리드가 도는 셈이다. 전체를 내려받지 않고 필요한 영역만 잘라서 읽는다.

프론트에서는 32×32 CSS grid로 셀에 색을 칠한다. 변화 점수가 높은 칸일수록 진하게 나온다. 히트맵처럼 보인다.

행정구역이랑 주변 맥락

숫자만 놓고 보면 이 셀이 강가인지 주차장인지 알 수가 없다. 그래서 공개 지리 데이터를 같이 붙였다.

한국 영역이면 KOSTAT 2013 단순화 행정경계를 겹친다. 시-도, 시-군-구 이름이 선택 위치에 따라 따라온다. OSM(OpenStreetMap)에서는 river, building, highway 같은 주변 시설도 가져온다. 이런 게 있어야 '이 셀은 ○○시 △△구 근처, 하천에서 0.3km' 같은 문장을 만들 수 있다.

GDELT 뉴스 API도 붙여 봤다. 분석 기간에 해당 지역 관련 뉴스가 있으면 참고 자료로 보여준다. 침수 주제면 flood, heavy rain 키워드로 검색하는 식이다.

LLM 분석

AI 분석은 두 갈래로 나눴다.

하나는 영역 전체 요약이다. 격자 전체 메트릭을 넘기면 수위 변화랑 식생 변화, 신뢰도, 주의할 점 같은 걸 구조화해서 마크다운으로 정리해 준다.

다른 하나는 셀 단위다. 변화 점수가 이상한 칸을 클릭하면 그 셀의 NDWI/NDVI 델타, 구름 비율, 주변 시설 힌트만 압축해서 LLM한테 보내고 해석을 받는다. '해당 셀은 ○○천 인근으로 NDWI 상승이 관측되었습니다' 이런 식으로 나온다.

공개 자료의 한계는 분명하다. 용어도 아직 다 익숙하지 않고. 구름이나 계절 때문에 전후가 엇갈리면 해석이 틀어질 수 있다. '피해 확정', '반드시 침수' 같은 표현은 LLM 출력에서도 막아 뒀다. 리포트마다 면책 문구도 단다.

결과

AI 붙이는 건 잘 됐다. 격자 점수랑 주변 지명, 시설 정보를 같이 넘기니 문장이 그럴듯하게 나온다. 히트맵 보다가 궁금한 칸 누르면 바로 설명이 뜬다.

위성 사진이 워낙 넓은 범위를 주니까 선택 위치에 따라 행정구역도 어느 정도 구분된다. 수도권 서부 타일을 고르면 서울, 고양, 인천 쪽 이름이 나오고 부산, 울산, 경남 타일이면 그쪽 이름이 나온다.

재밌는 실험이었다. 실무 도구라기보다 '이렇게도 되네' 쪽이다. 저장은 메모리에만 해 둬서 서버 끄면 날아간다. DB 붙이면 되지만 귀찮다.